/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sv.com.intesal.compra.managed;

import java.io.Serializable;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import sv.com.intesal.clases.LimpiarManaged;
import sv.com.intesal.clases.Mensaje;
import sv.com.intesal.compra.bean.Compra;
import sv.com.intesal.compra.bean.Proveedor;
import sv.com.intesal.compra.controlador.CompraControlador;
import sv.com.intesal.seguridad.managed.SessionManaged;

/**
 *
 * @author ejerez
 */
@ManagedBean(name = "consultaCompraManaged")
@ViewScoped
public class ConsultaCompraManaged implements Serializable {

    private Boolean flagStep_1;
    private Boolean flagStep_2;
    private Mensaje m;
    private SessionManaged sm;
    private Proveedor selectedProveedor;
    /*ENCA*/
    private Compra selectedEncaCompra;
    private List<Compra> encaCompras;
    /*DETA*/
    private Compra selectedDetaCompra;
    private List<Compra> detaCompras;
    private Compra selectedDetaCompraTotales;

    public ConsultaCompraManaged() {

        this.flagStep_1 = true;
        this.flagStep_2 = false;

        this.m = new Mensaje();
        this.sm = new SessionManaged();

        this.selectedProveedor = new Proveedor();
        this.selectedEncaCompra = new Compra();
        this.selectedDetaCompra = new Compra();
        this.selectedDetaCompraTotales = new Compra();

        this.detaCompras = null;
        this.encaCompras = null;
    }

    public void buscarGrid() {

        try {
            if (sm.validar_rol_usuario("wfrmcon_Compra", sm.buscar) == true) {
                this.selectedEncaCompra.setId_p(this.selectedProveedor.getCodigo_p());
                CompraControlador cc = new CompraControlador();
                this.encaCompras = cc.getConsulta_EncaCompra(this.selectedEncaCompra);
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void anularCompra() {

        try {
            if (this.validar_anular() == true) {
                if (sm.validar_rol_usuario("wfrmcon_Compra", sm.anular) == true) {
                    CompraControlador cc = new CompraControlador();
                    if (cc.validarCantidad_AnularCompra(this.selectedDetaCompra.getId_c()) == true) {

                        this.detaCompras.get(0).setFactura_c(this.selectedDetaCompra.getFactura_c());
                        cc.anularCompra(this.detaCompras);
                        LimpiarManaged.limpiar();
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void modificarCompra() {
        try {
            if (this.validar_modificar() == true) {
                if (sm.validar_rol_usuario("wfrmcon_Compra", sm.modificar) == true) {
                    CompraControlador cc = new CompraControlador();
                    cc.modificarCompra(this.selectedDetaCompra);
                }
            }
        } catch (Exception e) {
            m.messageError(m.getIerror());
            e.printStackTrace();
        }
    }

    private Boolean validar_modificar() throws Exception {
        try {
            Boolean var_return = true;
            if (this.selectedDetaCompra.getEstado_c().equals("A")) {
                m.messageError("NO PUEDE MODIFICAR REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaCompra.getId_c() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (var_return == true) {
                CompraControlador cc = new CompraControlador();
                if (cc.validar_estado_accion_anular_modificar(this.selectedDetaCompra.getId_c()) == false) {
                    m.messageError("NO PUEDE MODIFICAR REGISTRO YA ESTA ANULADO!");
                    var_return = false;
                }
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    private Boolean validar_anular() throws Exception {
        try {
            Boolean var_return = true;

            if (this.selectedDetaCompra.getEstado_c().equals("A")) {
                m.messageError("NO PUEDE ANULAR REGISTRO YA ESTA ANULADO!");
                var_return = false;
            }
            if (this.selectedDetaCompra.getId_c() == null) {
                m.messageFatal("DEBE ELEGIR UN REGISTRO A MODIFICAR. NO TIENE CODIGO ASIGNADO. ERROR");
                var_return = false;
            }
            if (this.detaCompras.size() == 0) {
                m.messageFatal("NO HAY MATERIALES PARA ANULAR EL REGISTRO");
                var_return = false;
            }
            if (var_return == true) {
                CompraControlador cc = new CompraControlador();
                if (cc.validar_estado_accion_anular_modificar(this.selectedDetaCompra.getId_c()) == false) {
                    m.messageError("NO PUEDE ANULAR REGISTRO YA ESTA ANULADO!");
                    var_return = false;
                }
            }
            return var_return;
        } catch (Exception e) {
            throw new Exception(e);
        }
    }

    public void ocultarFlag_1() {
        try {
            if (this.selectedDetaCompra == null) {
                m.messageError("DEBE ELEGIR UN REGISTRO PARA CONTINUAR");
            } else if (this.selectedDetaCompra != null) {
                this.flagStep_1 = false;
                this.flagStep_2 = true;

                CompraControlador cc = new CompraControlador();
                this.detaCompras = cc.getDeta_Compra(this.selectedDetaCompra.getId_c());

                this.selectedDetaCompraTotales = cc.getTotales_x_Compra(this.selectedDetaCompra.getId_c());
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void ocultarFlag_2() {
        try {
            this.flagStep_1 = true;
            this.flagStep_2 = false;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void getProveedor_Quick(Proveedor pr) {
        try {
            this.selectedProveedor = pr;
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarEncaReporte() {
        try {

            if (this.encaCompras == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else {
                if (sm.validar_rol_usuario("wfrmcon_Compra", sm.reporte) == true) {
                    CompraControlador cc = new CompraControlador();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    public void generarDetaReporte() {
        try {

            if (this.encaCompras == null) {
                m.messageError("NO HAY REGISTROS EN LA BUSQUEDA");
            } else if (this.detaCompras == null) {
                m.messageError("NO HAY MATERIALES EN LA TRANSACCION");
            } else {

                if (sm.validar_rol_usuario("wfrmcon_Ajuste", sm.reporte) == true) {
                    this.selectedEncaCompra.setId_c(this.selectedDetaCompra.getId_c());

                    CompraControlador cc = new CompraControlador();

                    this.selectedEncaCompra.setId_c(null);
                }
            }
        } catch (Exception e) {
            this.selectedEncaCompra.setId_c(null);
            e.printStackTrace();
            m.messageError(m.getIerror());
        }
    }

    /*
    SETTERS GETTERS
     */
    public Proveedor getSelectedProveedor() {
        if (selectedProveedor == null) {
            selectedProveedor = new Proveedor();
        }
        return selectedProveedor;
    }

    public void setSelectedProveedor(Proveedor selectedProveedor) {
        this.selectedProveedor = selectedProveedor;
    }

    public Boolean getFlagStep_1() {
        return flagStep_1;
    }

    public void setFlagStep_1(Boolean flagStep_1) {
        this.flagStep_1 = flagStep_1;
    }

    public Boolean getFlagStep_2() {
        return flagStep_2;
    }

    public void setFlagStep_2(Boolean flagStep_2) {
        this.flagStep_2 = flagStep_2;
    }

    public List<Compra> getDetaCompras() {
        return detaCompras;
    }

    public void setDetaCompras(List<Compra> detaCompras) {
        this.detaCompras = detaCompras;
    }

    public List<Compra> getEncaCompras() {
        return encaCompras;
    }

    public void setEncaCompras(List<Compra> encaCompras) {
        this.encaCompras = encaCompras;
    }

    public Compra getSelectedDetaCompra() {
        if (selectedDetaCompra == null) {
            selectedDetaCompra = new Compra();
        }
        return selectedDetaCompra;
    }

    public void setSelectedDetaCompra(Compra selectedDetaCompra) {
        this.selectedDetaCompra = selectedDetaCompra;
    }

    public Compra getSelectedEncaCompra() {
        if (selectedEncaCompra == null) {
            selectedEncaCompra = new Compra();
        }
        return selectedEncaCompra;
    }

    public void setSelectedEncaCompra(Compra selectedEncaCompra) {
        this.selectedEncaCompra = selectedEncaCompra;
    }

    public Compra getSelectedDetaCompraTotales() {
        if (selectedDetaCompraTotales == null) {
            selectedDetaCompraTotales = new Compra();
        }
        return selectedDetaCompraTotales;
    }

    public void setSelectedDetaCompraTotales(Compra selectedDetaCompraTotales) {
        this.selectedDetaCompraTotales = selectedDetaCompraTotales;
    }
    /*
    private void calculosDetalleCompra() throws Exception {
    try {

    for (int i = 0; i < detaCompras.size(); i++) {
    selectedDetaCompra.setSubTotal_c(selectedDetaCompra.getSubTotal_c() + (detaCompras.get(i).getCantidad_d() * detaCompras.get(i).getCosto_d()) + detaCompras.get(i).getIva_d() + detaCompras.get(i).getExentos_d());
    selectedDetaCompra.setTotalCosto_c(selectedDetaCompra.getTotalCosto_c() + detaCompras.get(i).getCosto_d());
    selectedDetaCompra.setTotal_descuento_c(selectedDetaCompra.getTotal_descuento_c() + detaCompras.get(i).getDescuento_d());
    selectedDetaCompra.setTotal_exento_c(selectedDetaCompra.getTotal_exento_c() + detaCompras.get(i).getExentos_d());
    selectedDetaCompra.setTotal_iva_c(selectedDetaCompra.getTotal_iva_c() + detaCompras.get(i).getIva_d());
    }
    selectedDetaCompra.setTotal_c(selectedDetaCompra.getSubTotal_c() + selectedDetaCompra.getPercepcion_c());
    } catch (Exception e) {
    throw new Exception(e);
    }
    }
     */
}
